# encoding:utf-8

from flask import Flask

# 导入ORM数据库框架
from flask_sqlalchemy import SQLAlchemy

import config

app = Flask(__name__)

app.config.from_object(config)

db = SQLAlchemy(app)


# CREATE TABLE IF NOT EXISTS Users (
#   id Integer PRIMARY KEY AUTOINCREMENT,
#   username varchar(100) NOT NULL
# )
#
# CREATE TABLE IF NOT EXISTS Articles(
# 	id integer PRIMARY KEY AUTOINCREMENT,
# 	title varchar(100) NOT NULL,
# 	content text NOT NULL,
# 	author_id integer,
# 	FOREIGN KEY (author_id) REFERENCES Users(id)
# )


class User(db.Model):
    __tablename__ = 'user'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)


# 创建数据库模型，生成对应的表。
class Article(db.Model):
    """
    __tablename__是表名；如果没有，则使用类名的全小写模式
    """
    __tablename__ = 'article'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(100), nullable=False)
    content = db.Column(db.Text, nullable=False)
    # 设置外键。设置关联到表user的id字段。注意这里是表名而不是模型名
    author_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    # 增加关系(通过外键实现)。第一个参数为模型名，通过外键会找相关作者。第二个参数为反向引用，通过user.articles可以获取作者的所有文章
    author = db.relationship('User', backref=db.backref('articles'))


# 测试运行创建所有表，如果没有问题，则表示数据库链接成功
db.create_all()


@app.route('/')
def hello_world():
    # db.drop_all()

    # # 增
    # article1 = Article()
    # article1.title = "number1"
    # article1.content = "第一个"
    # # 增加模型
    # db.session.add(article1)
    # # 提交事务
    # db.session.commit()

    # # 查
    # # result为BaseQuery对象
    # result = Article.query.filter(Article.title == 'number1')
    # print(result)
    # print(type(result))
    # # result可以转化为list，直接获取第一个元素，或者使用all()获取所有元素
    # article1 = result.first()

    # print(article1.title, article1.content)
    # # 改
    # article1 = Article.query.filter(Article.title == 'number1').first()
    # article1.title = 'number2'
    # db.session.commit()

    # # 删
    # article1 = Article.query.filter(Article.title == 'number2').first()
    # db.session.delete(article1)
    # db.session.commit()

    # 想要添加一篇文章，因为文章必须依赖用户而存在，所以先添加一个用户
    # user1 = User(username='liqiang')
    # db.session.add(user1)
    # db.session.commit()

    # 添加一篇文章
    # article1 = Article(title='aaa', content='bbb', author_id=1)
    # db.session.add(article1)
    # db.session.commit()

    # 要找文章标题为aaa的这个作者
    # 先根据title查询文章
    # article = Article.query.filter(Article.title == 'aaa').first()
    # # 再根据author_id查询作者
    # user = User.query.filter(User.id == article.author_id).first()
    # print(user.username)

    # 以上通过两步查找，稍显麻烦，我们希望通过article.author就可以获取文章的作者，希望通过user.articles就可以获取作者所有的文章

    # 再创建一个文章
    # article = Article(title='ccc', content='ddd')
    # article.author = User.query.filter(User.id == 1).first()
    # db.session.add(article)
    # db.session.commit()

    # 找文章标题为aaa的作者
    article = Article.query.filter(Article.title == 'aaa').first()
    print(article.author.username)

    for article in article.author.articles:
        print('-'*10)
        print(article.title)



    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True)
